package com.newtouch.bxzs.business.train.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.newtouch.bxzs.business.train.model.bo.*;
import com.newtouch.bxzs.business.train.model.vo.UserExaminationQuestionsVO;
import com.newtouch.bxzs.common.base.model.UserExaminationResult;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户考试管理Mapper
 *
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2021/3/25 10:48</td>
 * <td>dingqianbin</td>
 * <td>Create</td>
 * </tr>
 * </table>
 *
 * @author dingqianbin
 * @version 1.0.0
 * @since 1.0.0
 */
@Mapper
public interface UserExaminationMapper extends BaseMapper<UserExaminationResult> {

    /**
     * 查询用户考试信息
     *
     * @param userId 用户ID
     * @return 用户考试信息BO
     */
    UserExaminationInfoBO getUserExaminationInfo(@Param("userId") String userId);

    /**
     * 查询历史考试记录
     *
     * @param userId 用户ID
     * @param recentExaminationRecordsNumber 最近考试记录查询条数
     * @return 用户考试历史记录BO
     */
    List<UserExaminationHistoryBO> getUserExaminationHistory(@Param("userId") String userId, @Param("recentExaminationRecordsNumber") Integer recentExaminationRecordsNumber);

    /**
     * 查询用户考试列表
     *
     * @param page 分页参数
     * @param userId 用户ID
     * @param examinationType 考试类型：0-模拟考试，1-正式考试
     * @return 用户考试列表信息BO
     */
    IPage<UserExaminationBO> getUserExaminationList(@Param("page") Page<UserExaminationBO> page, @Param("userId") String userId, @Param("examinationType") String examinationType);

    /**
     * 批量将试题插入参考人员考试结果中
     *  @param userExaminationQuestionsVO 获取考试试题VO
     * @param userId 用户ID
     * @param examinationQuestionBOList
     */
    void batchInsert(@Param("userExaminationQuestionsVO") UserExaminationQuestionsVO userExaminationQuestionsVO, @Param("userId") String userId,@Param("list") List<ExaminationQuestionBO> examinationQuestionBOList);

    /**
     * 查询考试试题结果
     *
     * @param userExaminationQuestionsVO 获取考试试题VO
     * @param userId 用户ID
     * @return 用户考试试题信息BO
     */
    List<UserExaminationQuestionsBO> getUserExaminationQuestions(@Param("userExaminationQuestionsVO") UserExaminationQuestionsVO userExaminationQuestionsVO, @Param("userId") String userId);

    /**
     * 查询试题详情信息
     *
     * @param examinationQuestionsId 试题ID
     * @param userId
     * @return 试题详情信息BO
     */
    UserQuestionBO getQuestionInfo(@Param("examinationQuestionsId") String examinationQuestionsId, @Param("userId") String userId);

    /**
     * 查询错题/收藏题列表
     *
     * @param page 分页参数
     * @param questionType 查询类型 1-错题，2-收藏题
     * @param userId 用户ID
     * @return 错题/收藏题列表
     */
    IPage<UserWrongCollectionQuestionsBO> getWrongCollectionQuestions(@Param("page") Page<UserWrongCollectionQuestionsBO> page, @Param("questionType") String questionType,  @Param("userId") String userId);

    /**
     * 查询试题ID以及试题题号
     *
     * @param examinationPaperId 试卷ID
     * @return 试题信息BO
     */
    List<ExaminationQuestionBO> selectExaminationQuestionBOList(@Param("examinationPaperId") String examinationPaperId);
}
